package MathCore.Operands;

import java.util.Vector;
import MathCore.Lexeme;
import MathCore.Operand;

public class List extends Operand
{
	private Vector list = new Vector();

	public List()
	{
	}

	public List(List l)
	{
		for(int i = 0; i<l.size(); i++)
		{
			add((Operand)l.get(i).clone());
		}
	}

	public Operand add(Operand o)
	{
		if(o != null) list.addElement(o);
		return o;
	}

	public Operand addToTop(Operand o)
	{
		if(o == null) return null;
		if(list.isEmpty()) add(o);
		else list.insertElementAt(o, 0);

		return o;
	}

	public int size()
	{
		return list.size();
	}

	public Operand get(int i)
	{
		if(size() > i) return (Operand) list.elementAt(i);
		return null;
	}

	public String toString()
	{
		StringBuffer b = new StringBuffer();

		b.append('[');
		for(int i=0; i<size(); i++)
		{
			b.append(get(i).toString());
			if(i < size()-1) b.append(", ");
		}
		b.append(']');

		return b.toString();
	}

	public void fill(Operand n, int s)
	{
		if(n == null) return;
		for(int i=0; i<s; i++)
		{
			add((Operand) n.clone());
		}
	}

	public Lexeme clone()
	{
		return new List(this);
	}
}
